#include <iostream>
#include <thread>
#include <mutex>

using std::cout;
using std::endl;
using std::thread;
using std::mutex;
using std::unique_lock;

int gCnt = 0;
mutex mtx;//创建互斥锁

void threadFunc()
{
    for(size_t idx = 0; idx != 1000000; ++idx)
    {
        //unique_lock与lock_guard类似，都使用RAII的思想利用栈对象
        //的生命周期管理资源，当栈对象销毁的时候会进行自动解锁
        //除此之外，还提供了手动上锁与解锁的功能,所以，unique_lock
        //比lock_guard更加灵活,但是lock_guard比unique_lock的性能
        //要高一些
        unique_lock<mutex> ul(mtx);
        ++gCnt;
        /* ul.unlock();//ok */
        //xxx 不上锁
        /* ul.lock();//ok */
        //yyy 上锁
        /* ul.unlock();//ok */
        //zzz 不上锁
    }
}

int main(int argc, char *argv[])
{
    thread thA(threadFunc);
    thread thB(threadFunc);

    thA.join();
    thB.join();

    cout << "gCnt = " << gCnt << endl;

    return 0;
}

